home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 05.zip / BS1 part 5 / RSI.PD Kit Disk.adf / VFTest.c < prev   
C/C++ Source or Header  |  1991-11-15  |  5KB  |  203 lines

  1. /*---------------- TESTPROGRAMM FUER VEKTORFONTHANDLER -----------------*/
  2.  
  3. #include <intuition/intuition.h>
  4. #include <intuition/intuitionbase.h>
  5. #include <libraries/dos.h>
  6. #include <exec/ports.h>
  7. #include <exec/memory.h>
  8.  
  9. /*---- Strukturdefinition der Message ----*/ 
  10. struct VFontMess
  11. {
  12.   struct Node *ln_Succ;
  13.   struct Node *ln_Pred;
  14.   UBYTE ln_Type;
  15.   BYTE ln_Pri;
  16.   char *ln_Name;
  17.   struct MsgPort *mn_ReplyPort;
  18.   UWORD mn_Length;
  19.   struct RastPort *rp;
  20.   struct VekFont *VFont;
  21.   long xs,ys;
  22.   long wi,hi,spc;
  23.   long Flags;
  24.   char *String;
  25.   long Len,DrawMode;
  26. };
  27. /*---- Strukturdefinition Vektorfont ----*/
  28. struct VekFont
  29. {
  30.   short EdX,EdY;
  31.   USHORT FKenn;
  32.   UBYTE LoChar,HiChar;
  33.   short VBase;
  34.   long Reserved[4];
  35. };
  36.  
  37. /*---- Globale Variablen  ----*/
  38. struct MsgPort *ReplyPort=0L,*MPort=0L;
  39. struct IntuitionBase *IntuitionBase=0L;
  40. struct GfxBase *GfxBase=0L;
  41. char OutString[]="Beispieltext";
  42. char VFName[]="df0:VektorFonts/Topaz.vek";
  43. struct VekFont *VBuff=0L;
  44. int VFLen=0L;
  45.  
  46. main()
  47. {
  48. struct Window *wn=0L;
  49. struct IntuiMessage *imes;
  50. ULONG flags=ACTIVATE|WINDOWCLOSE,datei=0L;
  51. ULONG iflags=CLOSEWINDOW|MOUSEBUTTONS;
  52. USHORT class,code;
  53.  
  54.   if(OpenLibs() > 0)                                 goto abbruch;
  55.   if(!(wn=OpenAWindow(0,0,640,200,"",flags,iflags))) goto abbruch;
  56.   if(!LoadVFont(VFName))                             goto abbruch;
  57.   if(!InitPorts())                                   goto abbruch;
  58.   FOREVER
  59.   {
  60.     Wait(1<<wn->UserPort->mp_SigBit);
  61.     while(imes=GetMsg(wn->UserPort))
  62.     {
  63.       class=imes->Class;
  64.       code=imes->Code;
  65.       ReplyMsg(imes);
  66.       switch(class)
  67.       {
  68.         case CLOSEWINDOW:
  69.           goto abbruch;
  70.         case MOUSEBUTTONS:
  71.           if(imes->Code != SELECTDOWN) break;
  72.           SetAPen(wn->RPort,1);
  73.           WriteVekText(wn->RPort,VBuff,wn->MouseX,wn->MouseY,30,50,4,
  74.                        OutString,JAM1);
  75.       }
  76.     }
  77.   }
  78. abbruch:
  79.   if(wn) CloseWindow(wn);
  80.   if(VBuff) FreeMem(VBuff,VFLen);
  81.   CloseLibs();
  82. }
  83. /*--------------------------- Text schreiben ----------------------------*/
  84. /*   edp.fu */
  85. WriteVekText(rp,font,xs,ys,wi,hi,spc,string,drmd)
  86. struct RastPort *rp;
  87. struct VekFont *font;
  88. short xs,ys,wi,hi,spc;
  89. char *string,drmd;
  90. {
  91. struct VFontMess VMess;
  92.  
  93.   /* Massagestruktur initialisieren */
  94.   VMess.ln_Type=NT_MESSAGE;
  95.   VMess.mn_ReplyPort=ReplyPort;
  96.   VMess.mn_Length=0L;
  97.  
  98.   VMess.rp=rp;              /* Ausgaberastport */
  99.   VMess.VFont=font;         /* Zeiger auf Vektorfont */
  100.   VMess.String=string;      /* Zeichenkette */
  101.   VMess.xs=xs;              /* X-Koordinate */
  102.   VMess.ys=ys;              /* Y-Koordinate */
  103.   VMess.wi=wi;              /* Fontbreite */
  104.   VMess.hi=hi;              /* Fonthöhe   */
  105.   VMess.spc=spc;            /* Zeichenabstand */
  106.   VMess.Flags=0;            /* Flaggenregister auf 0 */
  107.   VMess.Len=strlen(string); /* Anzahl Ausgabezeichen */
  108.   VMess.DrawMode=drmd;      /* Zeichenmodus */
  109.  
  110.   PutMsg(MPort,&VMess);     /* Message abschicken */
  111.   WaitPort(ReplyPort);      /* Auf Antwort warten */
  112.   GetMsg(ReplyPort);        /* Antwort abholen    */
  113.   return(VMess.Flags);      /* Flagsvariable zurückgeben (Fehler ?) */
  114. }
  115. /*---------------------- Messageports initialisieren --------------------*/
  116. /*   edp.fu */
  117. InitPorts()
  118. {
  119.   MPort=FindPort("vekfport-t0");      /* Handlerport suchen */
  120.   if(MPort==0) return(0);             /* Handler wurde nicht gefunden */
  121.   ReplyPort=FindPort("vekfport-t1");  /* Antwortport suchen */
  122.   ReplyPort->mp_SigTask=FindTask(0);  /* Antwortport eigene Task zuweisen */
  123.   return(1);
  124. }
  125. /*---------------------------- Lade Vektorfont --------------------------*/
  126. /*   edp.fu */
  127. LoadVFont(name)
  128. char *name;
  129. {
  130. struct FileInfoBlock finfo;
  131. struct FileLock *lockp=0L;
  132. ULONG datei=0L;
  133.  
  134.   /*---- Filelaenge feststellen -----*/
  135.   if(!(lockp=Lock(name,ACCESS_READ))) return(0);
  136.   if(!Examine(lockp,&finfo))           
  137.   {
  138.     UnLock(lockp);
  139.     return(0);
  140.   }
  141.   VFLen=finfo.fib_Size;
  142.   UnLock(lockp);
  143.  
  144.   /*---- Speicher besorgen und File laden -----*/
  145.   if(VFLen > 0)
  146.   {
  147.     if(!(VBuff=AllocMem(VFLen,MEMF_PUBLIC))) return(0);
  148.     datei=Open(name,MODE_OLDFILE);
  149.     Read(datei,VBuff,VFLen);
  150.     Close(datei);
  151.   }
  152.   return(VFLen);
  153. }
  154. /*-------------------------- Libraries öffnen --------------------------*/
  155. /*   edp.fu */
  156. OpenLibs()
  157. {
  158.   if(!(IntuitionBase=OpenLibrary("intuition.library",0L))) return(1);
  159.   if(!(GfxBase=OpenLibrary("graphics.library",0L)))        return(2);
  160.   return(0);
  161. }
  162. /*-------------------------- Libraries schließen ------------------------*/
  163. /*   edp.fu */
  164. CloseLibs()
  165. {
  166.   if(IntuitionBase) CloseLibrary(IntuitionBase);
  167.   if(GfxBase)       CloseLibrary(GfxBase);
  168. }
  169. /*------------------------------ Window öffnen  ------------------------*/
  170. OpenAWindow(x,y,w,h,name,flags,iflags)
  171. short x,y,w,h;
  172. char *name;
  173. ULONG flags,iflags;
  174. {
  175. struct NewWindow NewWindow;
  176. struct Window *wn;
  177.  
  178.   NewWindow.LeftEdge=x;        
  179.   NewWindow.TopEdge=y;
  180.   NewWindow.Width=w;           
  181.   NewWindow.Height=h;
  182.   NewWindow.DetailPen=0;       
  183.   NewWindow.BlockPen=1;
  184.   NewWindow.Title=name;        
  185.   NewWindow.Flags=flags;
  186.   NewWindow.IDCMPFlags=iflags;
  187.   NewWindow.FirstGadget=NULL;  
  188.   NewWindow.CheckMark=NULL;
  189.   NewWindow.Type=WBENCHSCREEN;
  190.   NewWindow.Screen=IntuitionBase->ActiveScreen;
  191.   NewWindow.BitMap=0L;
  192.   NewWindow.MinWidth=NewWindow.MinHeight=10;
  193.   NewWindow.MaxWidth=640; 
  194.   NewWindow.MaxHeight=256;
  195.  
  196.   return(OpenWindow(&NewWindow));
  197. }
  198.  
  199.  
  200.  
  201.  
  202.  
  203.